/**
 * PagRelatorioAtividades.java
 * 
 * Projeto: SGA-LEDS
 * 
 * Rodrigo Soares Maia
 * IFES - Instituto Federal do Espírito Santo - Campus Serra
 */

package controleAtividades.cih;

import controleAtividades.cci.CtrlAtividades;
import controleInterno.cci.CtrlInterno;
import controleInterno.cdp.Colaborador;
import controleInterno.cdp.Projeto;
import controleAtividades.cdp.RegistroAtividade;
import controleInterno.cdp.TipoAtividade;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Div;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Window;

public class PagRelatorioAtividades extends GenericForwardComposer
{
    private Window winRelatorioAtividades;
    private Label nomeProjeto;
    private Label situacaoProjeto;
    private Label labelHorasProjeto;
    private Label horasProjeto;
    private Label horasConsulta;
    private Listbox listaRegistros;
    private Div tabelaRegistros;
    private Combobox tipoAtividade;
    private Combobox colaborador;
    private Combobox projeto;
    private Button pesquisar;
    private Datebox dataInicio;
    private Datebox dataFim;
    private Checkbox checkSemData;
    private Checkbox checkTodosColaboradores;
    private Checkbox checkTodosProjetos;
    private Checkbox checkTodosTiposAtividade;
    
    private List<RegistroAtividade> registros;
    
    private Projeto p;
    private Colaborador c;
    
    CtrlAtividades ctrlA = CtrlAtividades.getInstance();
    CtrlInterno ctrlI = CtrlInterno.getInstance();

    public void doAfterCompose(Component comp) throws Exception
    {
        super.doAfterCompose(comp);
        
        //ctrl.setWinExecucao(this);
        
        p = (Projeto) Executions.getCurrent().getSession().getAttribute("projeto");
        c = (Colaborador) Executions.getCurrent().getSession().getAttribute("colaborador");
        
        registros = null;
        
        listaRegistros = ctrlA.criarTabelaRegistro(registros); 
            
        listaRegistros.setParent(tabelaRegistros);

        //preenchendo a lista de projetos
        List<Projeto> projetos;
        projetos = ctrlI.obterProjetos();
        
        if (projetos != null)
        {
            ListModelList<Projeto> listProjeto = new ListModelList<>(projetos, true);
            projeto.setModel(listProjeto);
        }

        projeto.setReadonly(true);
        
        //preenchendo a lista de tipos
        List<TipoAtividade> tipos;
        tipos = ctrlI.obterTipos();
        
        if (tipos != null)
        {
            ListModelList<TipoAtividade> listTipo = new ListModelList<>(tipos, true);
            tipoAtividade.setModel(listTipo);
        }

        tipoAtividade.setReadonly(true);
        
        //preenchendo a lista de colaboradores
        List<Colaborador> colaboradores;
        colaboradores = ctrlI.obterColaboradores();
        
        if (colaboradores != null)
        {
            ListModelList<Colaborador> listCol = new ListModelList<>(colaboradores, true);
            colaborador.setModel(listCol); 
        }
        
        colaborador.setReadonly(true);
    }
    
    public void onCheck$radioTipos(Event event)
    {
        dataInicio.setDisabled(true);
        dataFim.setDisabled(true);
    }
    
    public void onCheck$checkSemData(Event event)
    {        
        boolean valor = dataInicio.isDisabled();
        
        dataInicio.setDisabled(!valor);
        dataFim.setDisabled(!valor);
    }
    
    public void onCheck$checkTodosProjetos(Event event)
    {       
        boolean valor = projeto.isDisabled();
        
        projeto.setDisabled(!valor);
    }
    
    public void onCheck$checkTodosColaboradores(Event event)
    {
        boolean valor = colaborador.isDisabled();
        
        colaborador.setDisabled(!valor);
    }
    
    public void onCheck$checkTodosTiposAtividade(Event event)
    {
        boolean valor = tipoAtividade.isDisabled();
        
        tipoAtividade.setDisabled(!valor);
    }
    
    public void onClick$pesquisar(Event e)
    {
        Map atributos = new HashMap();
        Map resultados;
        
        List<RegistroAtividade> listaRegistros;
        Double horas;

        if(checkTodosProjetos.isChecked())
        {
            atributos.put("projeto", null);
            
            this.labelHorasProjeto.setVisible(false);
            this.horasProjeto.setVisible(false);
        }
        else
        {
            atributos.put("projeto", projeto.getSelectedItem().getValue());
            
            this.labelHorasProjeto.setVisible(true);
            this.horasProjeto.setVisible(true);
            
            this.horasProjeto.setValue(ctrlA.obterHorasProjeto((Projeto) projeto.getSelectedItem().getValue()).toString());
        }
        
        if(checkTodosColaboradores.isChecked()) atributos.put("colaborador", null); else atributos.put("colaborador", colaborador.getSelectedItem().getValue());
        if(checkTodosTiposAtividade.isChecked()) atributos.put("tipoAtividade", null); else atributos.put("tipoAtividade", tipoAtividade.getSelectedItem().getValue());
       
        if(checkSemData.isChecked())
        {
            atributos.put("dataInicio", null);
            atributos.put("dataFim", null);
        }
        else
        {
            Calendar inicio = Calendar.getInstance();
            Calendar fim = Calendar.getInstance();

            inicio.setTime(dataInicio.getValue());
            fim.setTime(dataFim.getValue());
            
            atributos.put("dataInicio", inicio);
            atributos.put("dataFim", fim);
        }
        
        
        resultados = ctrlA.obterRegistros(atributos);
        
        listaRegistros = (List<RegistroAtividade>) resultados.get("registros");
        horas = (Double) resultados.get("horasConsulta");
        
        if (listaRegistros.isEmpty())
        {
            Messagebox.show("A consulta não obteve resultados!", "Aviso", 0, Messagebox.EXCLAMATION);
        }
        
        //preenchendo tabela com os registros resultantes da consulta
        ctrlA.atualizarTabelaRegistro(listaRegistros);
        this.horasConsulta.setValue(horas.toString());
    }
}
